package com.xiu.java8.lambda;

/*Lambda 表达式的省略规则：
1. 小括号中的参数类型可以省略。
2. 如果小括号中只有一个参数，那么可以省略小括号。
3. 如果大括号中只有一条语句，那么可以省略大括号，return，分号。
*/
/*Lambda 使用条件
Lambda 表达式的使用前提:
必须有接口（不能是抽象类），接口中有且仅有一个需要被重写的抽象方法。
 必须支持上下文推导，要能够推导出来 Lambda 表达式表示的是哪个接口中的内容。
 */
public class LambdaTtest4 {
	//定义方法，使用接口当做参数
    public static void method(MyInterface m) {
        m.printStr("hello");
    }
    public static void main(String[] args) {
    	//调用method方法，参数传递MyInterface实现类对象
        method(new MyInterface() {
            @Override
            public void printStr(String str) {
                System.out.println(str);
            }
        });
      //使用Lambda表达式的标准格式。
        method((String str) -> {
            System.out.println(str);
        });
//        1. 小括号中的参数类型可以省略。
        method((str)->{System.out.println(str);});
//        2. 如果小括号中只有一个参数，那么可以省略小括号。
        method(str->System.out.println(str));
//        3. 如果大括号中只有一条语句，那么可以省略大括号，return，分号。
      //可以使用接口当做参数，然后传递 Lambda 表达式(常用)，
        method(s -> System.out.println(s));
//        也可以将 Lambda 表达式赋值给一个接口类型的变量。
        MyInterface m = str -> System.out.println(str);
        m.printStr("Hello");
	}
}

interface MyInterface{
	void printStr(String string);
	
}